\documentclass[12pt,a4paper,oneside]{article}
\usepackage{lmodern}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{float}
\usepackage{listings}
\usepackage{color}

\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}

\lstset{ %
  backgroundcolor=\color{white}, 
  basicstyle=\footnotesize, 
  breakatwhitespace=false,  
  breaklines=true,        
  captionpos=b,
  commentstyle=\color{mygreen},
  frame=single,                    % adds a frame around the code
  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
  keywordstyle=\color{blue},       % keyword style
  language=C,                 % the language of the code
  morekeywords={*,...},            % if you want to add more keywords to the set
  rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
  showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
  showstringspaces=false,          % underline spaces within strings only
  showtabs=false,                  % show tabs within strings adding particular underscores
  stepnumber=2,                    % the step between two line-numbers. If it's 1, each line will be numbered
  stringstyle=\color{mymauve},     % string literal style
  tabsize=2,                       % sets default tabsize to 2 spaces
}
\setlength{\topmargin}{-.5in}
\setlength{\textheight}{9in}
\setlength{\oddsidemargin}{.125in}
\setlength{\textwidth}{6.25in}

\hypersetup{
    unicode=false,          % non-Latin characters in Acrobat’s bookmarks
    pdftoolbar=true,        % show Acrobat’s toolbar?
    pdfmenubar=true,        % show Acrobat’s menu?
    pdffitwindow=false,     % window fit to page when opened
    pdfnewwindow=true,      % links in new window
    colorlinks=true,       % false: boxed links; true: colored links
    linkcolor=black,          % color of internal links (change box color with linkbordercolor)
    citecolor=green,        % color of links to bibliography
    filecolor=magenta,      % color of file links
    urlcolor=cyan,          % color of external links
    linktoc=page
}
\setcounter{tocdepth}{2}
\begin{document}

\begin{titlepage}
\begin{flushright}
           \includegraphics[scale=0.1]{images/univ_orleans}\\ 
                      Département Informatique
\end{flushright}
\begin{center}
\textbf{
\huge{Rapport}\\
\vspace{2mm}
\huge{Projet Analyse Statique}\\
}

\vspace{15mm}
\begin{large}
	\textit{Willy FRANÇOIS, Tristan MONEDIÈRE, Jean-Baptiste PERRIN}
\end{large}

\begin{figure}[b!]
\begin{flushright}
~~\\ ~~\\ ~~\\ ~~\\ ~~\\ ~~\\ ~~\\
\large{Année Universitaire 2013-2014}
\end{flushright}
\end{figure}
\end{center}
\end{titlepage}

\tableofcontents

\newpage

\section{Introduction}
\input{includes/introduction}
\section{Répartition des tâches}
Nous nous sommes répartis les tâches de la façon suivante :
\begin{itemize}
\item Willy c'est occupé de calculer les variables d'initialisation pour l'algorithme depuis l'AST. Ainsi que l'adaptation du compilateur.
\item Tristan a mis en place l'algorithme d'analyse.
\item Jean-Baptiste a réalisé les fonctions pour gérer les structures de données pour l'algorithme.
\end{itemize}

\section{Réalisation}
\subsection{Compilateur}
Afin d'éviter de refaire une compilateur, nous avons repris le compilateur que Willy a réalisé lors du module de compilation du semestre 2.
Il générait un \emph{AST (Abstract Syntaxic Tree)} pour le langage WHILE.
Nous avons modifié le compilateur et l'arbre afin qu'il corresponde aux modifications du langage WHILE du projet.

\subsection{Analyseur}

\subsubsection{Structures de données}
Afin de pouvoir contenir les informations pour et pendant l'analyse, nous avons mis en place un certain nombre de structures.

\paragraph{}
Une structure block\_type afin de pouvoir identifier chaque bloc.
\begin{lstlisting}
enum blockType {
	B_ASSIGN, B_BOOL_EXP, B_SKIP
};
\end{lstlisting}

\paragraph{}
La structure declaration est une liste contenant l'ensemble des déclarations des variables.
\begin{lstlisting}
struct declaration {
	int vId;
	char * vName;
	declaration * next;
};
\end{lstlisting}

\paragraph{}
Il s'agit d'une simple liste chaînée d'entiers.
\begin{lstlisting}
struct int_list {
	int val;
	int_list * next;
};
\end{lstlisting}

\paragraph{}
Il s'agit d'un bloc du code à analyser ([x := a], [b], [skip]).
\begin{lstlisting}
struct block {
	int label;
	blockType bType;
	type sType;
	int assignedVar;
	int_list * variables;
	char * str;
};
\end{lstlisting}

\paragraph{}
C'est une liste chaînée qui contient l'ensemble des blocs.
\begin{lstlisting}
struct block_list {
	block * val;
	block_list * next;
};
\end{lstlisting}

\paragraph{}
Il représente un élément du flot.
\begin{lstlisting}
struct flow {
	int start;
	int end;
};
\end{lstlisting}

\paragraph{}
Cette une liste chaînée qui contient le flot du programme à analyser.
\begin{lstlisting}
struct flow_list {
	flow * val;
	flow_list * next;
};
\end{lstlisting}

\paragraph{}
Ceci représente un block d'analyse pour un label du code, la liste "list" contient les variables de l'analyse (plus précisément leur identifiant).
\begin{lstlisting}
struct analysis_block{
	int_list *list;
	int label;
};
\end{lstlisting}

\paragraph{}
C'est une liste chaînée qui contient l'ensemble des blocs d'analyse.
\begin{lstlisting}
struct analysis_list{
	analysis_block *block;
	analysis_list* next;
};
\end{lstlisting}

\paragraph{}
Chacune de ces structures possède ses fonctions afin de les manipuler.
Vous trouverez l'ensemble des ces fonctions dans les .h associés.

\subsubsection{Initialisation des variables de l'analyse}
Afin d'initialiser les variables pour l'analyse, nous parcourons l'arbre et générons le flot, init, final, blocks.

\subsubsection{Analyse du code}
L'analyse suit l'algorithme de MFP. Une liste de analysis\_block est créé lors de l'initialisation avec pour chaque liste de variables la valeur NULL (qui correspond à une liste vide ici).

A chaque itération les blocs de la liste sont mis à jour. A la fin du traitement les analysis\_block contiennent la liste des variables pour chaque label du programme.

\newpage
\end{document}
